package org.jeecg.modules.demo.socket.until;

import io.netty.channel.Channel;
import io.netty.channel.group.ChannelGroup;
import io.netty.channel.group.DefaultChannelGroup;
import io.netty.util.concurrent.GlobalEventExecutor;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.ConcurrentHashMap;

/**
 * @author sixiaojie
 * @date 2020-03-28-15:07
 */
@Slf4j
public class NettyConfig {


  /**
   * 定义一个channel组，管理所有的channel
   * GlobalEventExecutor.INSTANCE 是全局的事件执行器，是一个单例
   * Channel：通道，代表一个连接，每个Client都对应一个具体的Channel
   * ChannelPipeline：责任链，每个channel都有且仅有一个ChannelPipeline与之对应，里边有各种各样的Handel
   */
  private static ChannelGroup channelGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);

  /**
   * 存放用户与Chanel的对应信息，用于给指定用户发送消息
   */
  private static ConcurrentHashMap<String,Channel> userChannelMap = new ConcurrentHashMap<>();

  private NettyConfig() {
    log.info("运行到NettyConfig()");
  }
  
  /**
   * 获取channel组
   * 所有用户信息
   * @return
   */
  public static ChannelGroup getChannelGroup() {
    log.info("运行到NettyConfig的getChannelGroup()方法");
    return channelGroup;
  }

  /**
   * 获取用户channel map
   * 单独用户信息
   * @return
   */
  public static ConcurrentHashMap<String,Channel> getUserChannelMap(){
    log.info("运行到NettyConfig的getUserChannelMap()方法");
    return userChannelMap;
  }
}